package com.wbs.cluster.redis.service;

import java.util.List;
import java.util.Map;

/**
 * TODO redis常用操作接口
 */
public interface RedisSelfService {

    //key对应string json type string
    boolean set(String key, String value);

    //获取key对应数据对象 type string
    String get(String key);

    //设置key值有效期
    boolean expire(String key, long expire);

    //key对应List数据对象 type string
    <T> boolean setList(String key, List<T> list);

    //获取key对应list  type string
    <T> List<T> getList(String key, Class<T> clz);

    //在key 对应 list的头部添加字符串元素   type list
    long lpush(String key, Object obj);

    //在key 对应 list 的尾部添加字符串元素 type list
    long rpush(String key, Object obj);

    //返回并删除名称为key的list中的首元素 type list
    String lpop(String key);

    //删除操作key
    void delete(final String key);

    /**
     * 根据key获取素有hash值
     *
     * @param key
     * @return
     */
    List<Object> getValues(String key);

    //保存操作 type Hash
    void setHashVal(final String key, final Map<String, String> map);

    //获取操作 type Hash 返回 list json
    List<String> getHashVal(final String key, final String... value);

    //删除指定key下的Hash集合对于的key
    void delHashValKey(final String key, final Object... hashKeys);

    //hashkey是否存在
    boolean hasHashKey(String key, String hashKey);

    //设置指定key下的hash值
    void setHashValKey(final String key, final String hashKey, final String value);

    //hash key 是否存在
    boolean hasKey(String key);

    //获取hashkey对应的值
    String getHashValStr(String key, String hashKey);

    /*******************新增方法 ↓↓↓↓↓↓ fengyuan******************************************************************************************/
    /**
     * 设置redis key value 带失效时间（公共变量类 GlobalConfig(可继承重写)里面修改时效时间）
     */
    void setRedisExpire(String[] keys, String value);

    void setRedisExpire(String keys, String value);

    /**
     * @Description: TODO 设置redis key value 带失效时间（公共变量类 GlobalConfig(可继承重写)里面修改时效时间）value为类对象 自动转json字符串
     */
    void setRedisExpire(String[] keys, Object value);

    void setRedisExpire(String keys, String value, Long time);

    void setRedisExpire(String[] keys, String value, long expireTime);


    void setRedisExpire(String keys, String value, long expireTime);

    /**
     * @Description: TODO 设置redis key value 带失效时间（公共变量类 GlobalConfig(可继承重写)里面修改时效时间）value为类对象 自动转json字符串
     */
    void setRedisExpire(String keys, Object value);

    /**
     * @Description: TODO 设置redis key value 带失效时间（公共变量类 GlobalConfig(可继承重写)里面修改时效时间）
     */
    void setRedisExpire(String[] keys, Map<String, String> map);

    void setRedisExpire(String keys, Map<String, String> map);

    /**
     * @Description: TODO 设置redis
     */
    void setRedis(String[] keys, String value);

    void setRedis(String keys, String value);

    /**
     * @Description: TODO 设置redis
     */
    void setRedis(String[] keys, String[] skeys, String value);

    void setRedis(String[] keys, String skeys, String value);

    void setRedis(String keys, String[] skeys, String value);

    void setRedis(String keys, String skeys, String value);

    /**
     * @Description: TODO 获取redis
     */
    String getRedis(String[] keys);

    String getRedis(String keys);

    /**
     * @Description: TODO 获取redis
     */
    String getRedis(String[] keys, String[] skeys);

    String getRedis(String[] keys, String skeys);

    String getRedis(String keys, String[] skeys);

    String getRedis(String keys, String skeys);

    /*******************新增方法 ↑↑↑↑↑↑ fengyuan******************************************************************************************/

}  
